# 1、写函数,将传入的列表或元祖对象的奇数位索引对应的元素

"""def fun_1(list_1:list or tuple):
    list_2=[]
    for i in range(len(list_1)):
        if i%2==1:
            list_2.append(list_1[i])
    return list_2
print(fun_1((1,66,3,4,5,3,4,56)))
"""
# 2、写函数,判断用户传入的对象(string,list,tuple)长度是否大于5
import random

"""def fun_2(user_in:str or list or tuple):
    return len(user_in)
print(fun_2("audbuibahkf"))"""
# 3、写函数,计算传入的string中,数字,字母,空格以及其它内容的个数,并返回结果
"""def fun_3(str_in:str):
    count_s = 0
    count_z = 0
    count_k = 0
    count_q = 0
    for i in str_in:
        if "0"<=i<="9":
            count_s+=1
        elif "a"<=i<="z" or 'A'<=i<='Z':
            count_z+=1
        elif i==" ":
            count_k+=1
        else:
            count_q+=1
    return f"数字：{count_s}个，字母：{count_z}个，空格：{count_k}个：其他字符：{count_q}个"
print(fun_3("asdasd123123  dij  ij%^&"))
"""
# 4、写函数,接收两个数字参数,返回较大的那个数字
"""def fun_4(x:int,y:int):
    if x>y:
        return x
    else:
        return y
a = int(input("数字1："))
b = int(input("数字2："))
print(fun_4(a,b))"""
# 5、编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
"""def cacluate(*args):
    return args
print(cacluate(1,2,3,4344,[1,2,3],"di","si"))"""
# 6、编写一个函数, 接收字符串参数, 返回一个元组,元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
"""def fun_6(str_in:str):
    num_A=0
    num_a = 0
    for i in str_in:
        if 'a'<=i<='z':
            num_a+=1
        elif 'A'<=i<='Z':
            num_A+=1
    return (num_A,num_a)
print(fun_6("iehdiwaAIHDowh"))"""
# 7、编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和一个整形数k, 返回一个新列表.
# 函数需求:
# 将列表下标k之前对应(不包含k)的元素逆序;
# 将下标k及之后的元素逆序;
"""def fun_7 (list_in:list,k:int):
    list1= list_in[0:k][::-1]
    # list1.reverse()
    list2 = list_in[k:][::-1]
    # list2.reverse()
    return list1+list2
list_in=[]
for i in range(31):
    list_in.append(random.randint(1,100))
print(list_in)
print(fun_7(list_in,6))"""
# 8、编写函数，从键盘输入参数x和n，计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值
"""def fun_8(x:int,n:int):
    s_x = ''
    num=0
    for i in range(1,n+1):
        if i==1:
            s_x = s_x+str(x) * i
            num = int(str(x)*i)+num
        else:
            s_x=s_x+'+'+str(x)*i
            num = int(str(x) * i) + num
    return s_x +f" = {num}"
print(fun_8(6,5))
"""
# 9、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
"""def fun_9(name,sex='男',*info):
    age = info[0]
    address = info[1]
    return f"姓名：{name}，性别{sex}，年龄：{age}，地址：{address}"
"""
# 10、写函数,接收n个数字,返回这些数字的和(动态传参)
"""def fun_10(*info):
    sum =0
    for i in range(len(info)):
        sum+=int(info[i])
    return sum
print(fun_10(12,23,45,6,7,8,9,898,7,87,6,5))"""
# 11、在实参中传入多个可迭代对象(要有string,list,tuple,set,dict),将每个对象的每个元素都加到args或kwargs里
"""def fun_11(*args,**kwargs):
    args1=[]
    for i in args:
        if type(i) ==str:
            args1=list(i)+args1
        elif type(i)==list:
            args1 = i+args1
        elif type(i)==tuple:
            args1+=i
        elif type(i)==set:
            for j in range(len(i)):
                r=i.pop()
                args1.append(r)
    return args1,kwargs
print(fun_11('asdasd',(1,23),[5,2,32],{1,2},name='ding',age=14))"""
# 12、写函数,把传过来的列表中的每一个元素都用"_"拼接,并返回
"""def fun_12(user_in:list):
    
    strin = ''
    for i in range(len(user_in)):
        if i ==0:
            strin = strin+str(user_in[i])
        else:
            strin=strin +'_'+str(user_in[i])
    return strin
print(fun_12(['asd','sf',2,3,4,52,54]))"""
"""def fun_12(user_in:list):
    s = ''
    for i in user_in:
        if user_in.index(i)==len(user_in)-1:
            s = s+str(i)
        else:
            s = s + str(i)   +'_'
    return s
print(fun_12([1,2,3,4,2,'sdf','sdf','sefth']))"""
"""def fun_12(user_in:list):
    s = ''
    for i in user_in:

        s = s+str(i)+'_'

    return s[:-1]
print(fun_12([1,2,3,4,2,'sdf','sdf','sefth']))"""

# 13、写函数,传入一个数字,返回这个数的阶乘。示例：1x2x3....
"""def fun_13(x:int):
    num = 1
    s_n =''
    for i in range(1,x+1):
        num=num*i
        if i==1:
            s_n=s_n+str(i)
        else:
            s_n=s_n+'x'+str(i)
    return s_n+f"={num}"
print(fun_13(9))"""
# 14、写函数,返回一个扑克牌列表,里面有52项,每一项都是一个tuple
"""def fun_14():
    l_result = []
    l1 = ["梅花","方块","黑桃","红桃"]
    l2 = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
    for i in l1:
        for j in l2:
            l_result.append((i,j))
    return l_result
print(fun_14())"""
# 15、编写函数，求1+2+3+…N的和
"""def fun_15(n:int):
    num =0
    for i in range(1,n+1):
        num +=i
    return num
num = int(input("请输入n"))
print(fun_15(num))"""
# 16、编写一个函数，求多个数中的最大值
"""def fun_16(*user_in):
    max_in=user_in[0]
    for i in range(len(user_in)):
        if max_in<user_in[i]:
            max_in=user_in[i]
    return max_in
print(fun_16(1,2,3,4,5,4,64,45))"""
# 17、编写一个函数，提取指定字符串中所有的字母，然后拼接在一起产生一个新的字符串
"""def fun_17(user_s:str):
    new_s = ''
    for i in user_s:
        if i not in new_s:
            new_s=new_s+i
    return new_s
print(fun_17('asdffsiaocbcoaeugbledwa'))"""
# 18、写一个函数，求多个数的平均值
"""def fun_18(*args):
    return sum(args)/len(args)
print(fun_18(12,3,21,14,5,32,22,2))"""
# 19、写一个自己的len函数，统计指定序列中元素的个数
"""def fun_len(in_list):
    num = 0
    for i in in_list:
        num+=1
    return num
print(fun_len([1,2,3,4,5,6,7,8,9,11,12,13]))"""
# 20、找出传入的列表或元组的奇数位对应的元素，并返回一个新的列表
"""def fun_20(user_in:list or tuple):
    new_list=[]
    for i in range(len(user_in)):
        if i%2==0:
            new_list.append(user_in[i])
    return new_list
print(fun_20((12,2,123,4,5,27,62,25,5254)))"""
# 21、水仙花数：个位、十位、百位的立方加在一起等于数的本身
"""def fun_21():
    num = 100
    while num<1000:
        if (num//100)**3+(num%100//10)**3+(num%10)**3==num:
            print(num,end="\t") # 153   370 371 407
        num+=1
fun_21()"""
# 22、 定义函数，有一个形参，传入的是列表，数组大小不超过 100个，
# 数组中的每个元素值不允许超过 100，但是可以等于100，
# 如果列表大小超过了100个截取到第100个为止，要求返回的列表格式：
# 删除所有重复元素，使得每个元素只出现一次
# 按照数字的大小，由高到低排序返回
"""def fun_22(user_list:list):
    new_list = user_list[:100]
    result_list =[]
    for i in new_list:
        if i>100:
            return "您传入的数组元素大于100，请检查数组"
        elif i not in result_list:
            result_list.append(i)
    result_list = sorted(result_list,reverse = True)
    return result_list
print(fun_22([12,23,43,21,8,97,56,100,33,44,5,55,12,23,54,23,45,47,98,6,7,6,54,34,32,11,
              2,29,32,12,23,43,21,8,97,56,100,33,44,5,55,12,23,54,23,45,47,98,6,7,6,54,34,
              32,11,2,29,33,12,23,43,21,8,97,56,100,33,44,5,55,12,23,54,23,45,47,98,6,7,6,54,
              34,32,11,2,29,32,12,23,43,21,8,97,56,100,33,44,5,55,12,23,54,23,45,47,98,6,7,6,54,34,32,11,2,29,33]))
"""
# 23、定义函数 getLength，打印用户传入的容器类型和数据长度
"""def getLength(*args):
    print(type(args))
    print(len(args[0]))
getLength([12,12,1,1,2,34,2,524])"""
# 24、定义函数 generateNum( )
"""def generateNum():
    import random
    return random.randint(1,100000)
print(generateNum())"""
# 25、定义函数 moreThan(num)，判断输入的数字是否大于1500
"""def moreThan(num):
    if num>1500:
        print(f"您输入的数字：{num}大于1500")
    elif num==1500:
        print(f"您输入的数字：{num}等于1500")
    else:
        print(f"您输入的数字：{num}小于1500")"""
# 26、定义函数，有两个形参，第一个形参到第二个形参的范围，所有平方数之和
"""def fun_26(x:int,y:int):
    sum =0
    for i in range(x,y+1):
        sum += i*i
    return sum
print(fun_26(3,9))"""
# 27、写函数，检查传入字典的每一个value长度，如果大于2，
# 那么仅保留前两个长度的内容， 并将新内容返回给调用者
"""def fun_27(user_dict:dict):
    for key,value in user_dict.items():
        if len(str(value))>2:
            user_dict[key] = str(value)[:2]
    return user_dict
print(fun_27({"name":"田野里","age":123,"地址":"辽宁沈阳"}))
"""
#  28、写函数，判断用户传入的对象（字符串、列表、元组）的元素是否为空
"""def fun_28(user_in):
    if len(user_in)==0:
        return f"您输入的对象元素为空"
    else:
        return f"您输入的对象元素不为空"
print(fun_28(''))"""
# 29、编写自定义函数，完成一个简单的减法运算函数
"""def fun_29(a:int,b:int):
    return a-b
print(fun_29(198,37))"""
# 30、编写自定义函数，可以输出自己的名字即可。
"""def fun_30():
    return "丁莹"
print(fun_30())"""
# 31、编写自定义函数：剪刀石头布
# 游戏开始，初始状态下用户和电脑都有 100 分，赢一局+10 分，输一局-10 分。
# 当用户为 0 分时，游戏结束，提示游戏结束，比赛输了
# 当用户为 200 分时，游戏结束，提示游戏结束，赢得比赛、每轮比赛都输出当前的分数
# 1 代表剪刀 2 代表石头 3 代表布
"""def fun_31():
    import random
    print("剪刀石头布"
          "初始状态下用户和电脑都有 100 分，赢一局+10 分，输一局-10 分")
    user_c = 100
    computer_c=100
    while True:
        if user_c==0:
            print("游戏结束，比赛输了")
            break
        elif user_c==200:
            print("游戏结束，赢得比赛")
            break
        else:
            print("1 代表剪刀 2 代表石头 3 代表布")
            u_in = input("请输入选择：")
            c_in = str(random.randint(1,3))
            if (u_in=='1' and c_in=='2')or(u_in=='2' and c_in=='3') or (u_in=='3' and c_in=='1'):
                user_c-=10
                computer_c+=10
                print(f"您的分数：{user_c},系统的分数：{computer_c}")
            elif (u_in=='2' and c_in=='1')or(u_in=='3' and c_in=='2') or (u_in=='1' and c_in=='3'):
                user_c += 10
                computer_c -= 10
                print(f"您的分数：{user_c},系统的分数：{computer_c}")
            elif u_in==c_in:
                print(f"您的分数：{user_c},系统的分数：{computer_c}")
            else:
                print("您输入的数字有误，请重新输入。。。")
fun_31()"""
# 32、编写一个函数，接受一个字符串作为参数，并返回该字符串的逆序字符串
"""def fun_32(in_str:str):
    return in_str[::-1]
print(fun_32(input("请输入字符串：")))
"""
# 33、编写一个函数，接受一个数字列表作为参数，并返回其中所有偶数的列表
"""def fun_33(in_list:list):
    result_list = []
    for i in in_list:
        if i%2==0:
            result_list.append(i)
    return result_list
print(fun_33([12,21,23,43,54,2,3,64,36]))"""
# 34、编写一个函数，接受一个字符串列表作为参数，并返回其中最长的字符串。
"""def fun_34(str_list:list):
    len_str =len(str_list[0])
    str_max = str_list[0]
    for i in str_list:
        if len(i)>len_str:
            len_str=len(i)
            str_max = i
    return str_max
print(fun_34(['asdasd','ininfien','ade','isja','yuingiensal','siaha','asdfaaf']))"""
# 35、编写一个函数，接受一个数字列表作为参数，并返回其中所有数字的平方的总和
"""def fun_35(num_list:list):
    num =0
    for i in num_list:
        num = num+i*i
    return num
print(fun_35([12,4,34,23,43,5]))"""
# 36、编写一个函数，接受一个字符串作为参数，并返回其中所有单词的首字母的大写形式
"""def fun_36(str_in:str):
    str_list=str_in.split(" ")
    str_new=''
    for i in str_list:
        str_new = str_new+i.capitalize()+' '
    return str_new
print(fun_36('asd sd a aevce aea va aagd fdsi'))"""
# 37、编写一个函数，接受两个列表作为参数，并返回两个列表的交集
# 举例：
# list1 = [100,200,300,454]
# list2 = [454,789,125,46]
# 返回：[454]
"""def fun_37(list1:list,list2:list):
    new_list =[]
    for i in list1:
        if i in list2:
            new_list.append(i)
    return new_list
print(fun_37([100,200,300,454],[454,789,125,46]))"""
#  38、定义一个学生注册函数enroll()，打印学生姓名，性别，年龄，城市
"""def enroll():
    name = input("请输入姓名：")
    sex = input("请输入性别：")
    age = input("请输入年龄：")
    city = input("请输入你所在城市：")
    dict1 ={}
    dict_in={}
    dict_in["性别"] = sex
    dict_in["年龄"] = age
    dict_in["城市"] = city
    dict1[name] = dict_in
    print(dict1)
enroll()"""
